/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 苏李涛
 * Date: 2024-05-10
 * Time: 1:07
 */


class Dog {
    //字段/属性
    public String name;
    public int age;

    //方法/行为
    public void eat() {
        System.out.println(name + "在吃东西");
    }
}

//this的三种用法：1.可以通过this访问对象的成员变量   2.可以通过this访问对象的非静态的成员方法  3.可以通过this访问当前对象的其他构造方法,这样访问---》this.()

class Day {
    public int year;
    public int month;
    public int day;

    //this的传递需要隐藏参数（Day this）
    public void SetDay(Day this, int year, int month, int day) {
        //注意这里的year，month，day都是局部变量，要用this来解决
       this.year = year;
        this.month = month;
        this.day = day;
        this.DayPrint();
    }



    public void DayPrint() {
        System.out.println(year + "年 " + month + "月 " + day + "日 ");
    }

    //注意:构造方法的，方法名和当前类名，必须一致

    //构造方法作用，就是用来，初始化对象中的成员变量的，并且构造方法可以重载
   public Day() {

        this(2007, 9, 1);
       System.out.println("这是个无参的构造方法。。。");

    }

    public Day(int year, int month, int day) {
        this.day = day;
        this.month = month;
        this.year = year;
        DayPrint();

        System.out.println("这是个有参的构造方法。。。。");

    }
}

/**
 * 总结：java中，当你不写任何构造方法时，Java会给你提供，一个默认的，无参的构造方法。
 * 但是如果你有其他的构造方法，Java不会给你提供，一个不带参数的构造方法了
 */

public class Main {
    public static void main(String[] args) {
        //实例化对象的时候可以，可以借用，构造方法，对成员变量初始化

        Day day = new Day();
        day.SetDay(2024, 4, 2);
        day.DayPrint();

       /* Day day1 = new Day();
        day.SetDay(2025, 5, 2);
        day.DayPrint();

        Day day2 = new Day();
        day.SetDay(2026, 6, 2);
        day.DayPrint();*/
    }


//    public static void main1(String[] args) {
//        //实例化对象
//        Dog dog = new Dog();
//
//        *//**
//         * 基本数据类型默认值为’0‘
//         * 引用类型默认值为’null'
//         *//*
//        System.out.println(dog.name);
//        System.out.println(dog.age);
//
//
//        Dog dog = new Dog();
//        dog.name = "灰灰";
//        dog.age = 2;
//        dog.eat();
//
//
//
//
//
//    }
}




